package com.wangyk.pay.util;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.UUID;

/**
 * @ClassName CreateSign
 * @Description TODO(生成随机数，支付宝签名算法)
 * @author wangyk
 * @Date 2018年9月18日 下午4:56:11
 * @version 1.0.0
 */
public class CreateSign
{
    private static String characterEncoding = "UTF-8";
    
    /**
     * @Description (签名生成算法，Map中的参数为AscII排序，最后再加上key，进行MD5加密)
     * @author wangyk
     * @param parameters
     * @param key
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static String createSign(SortedMap<Object, Object> parameters, String key)
    {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();// 所有参与传参的参数按照AscII排序（升序）
        Iterator it = es.iterator();
        while (it.hasNext())
        {
            Map.Entry entry = (Map.Entry)it.next();
            String k = (String)entry.getKey();
            Object v = entry.getValue();
            if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k))
            {
                sb.append(k + "=" + v + "&");
            }
        }
        sb.append("key=" + key);
        String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
        return sign;
    }
    
    /**
     * @Description (生成随机数)
     * @author wangyk
     * @return
     */
    public static String getNonceStr()
    {
        // Random random = new Random();
        // return MD5Util.MD5Encode(String.valueOf(random.nextInt(10000)), "UTF-8");
        return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);// 要求不超过32位
    }
    
    /**
     * @Description (生成时间戳)
     * @author wangyk
     * @return
     */
    public static String getTimeStamp()
    {
        return String.valueOf(System.currentTimeMillis() / 1000);
    }
}
